﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Chilis.Marketing.Common;
using Chilis.Marketing.Business.Entity;
using System.Data;

namespace Chilis.Marketing.Data.Access
{
    public class DAPruebaPiloto : ConexionBD
    {
        #region ATRIBUTOS

        private SqlCommand cmd;

        #endregion

        #region CONSTRUCTOR
        #endregion

        #region PROPIEDADES
        #endregion

        #region METODOS

        /// <summary>
        /// Método              : insertarPruebaPiloto
        /// Descripción         : Inserta Prueba Piloto en la BD
        /// Fecha Creacion      : 01/04/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 01/04/2012
        /// </summary>
        /// <param name="campanhaBE">Entidad que representa la Campanha</param>
        /// <param name="transaccionIniciada">Indicador de Transaccion Iniciada</param>
        /// <returns>Retorna el Id del Arte insertado</returns>
        public int insertarPruebaPiloto(BECampanha campanhaBE,
                                        bool transaccionIniciada)
        {
            int codInsertado = 0;
            if (!transaccionIniciada)
            {
                this.Conexion();
                this.AbrirConexion();
            }

            cmd = new SqlCommand();
            cmd.Connection = this.connection;
            cmd.Transaction = this.miTransaccion;
            cmd.CommandText = "spInsertaPruebaPiloto";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();

            BEPruebaPiloto pruebaPilotoBE = null;
            if (campanhaBE != null)
            {
                if (campanhaBE.Creativo != null)
                {
                    if (campanhaBE.LArtes != null && campanhaBE.LArtes.Count > 0)
                    {
                        pruebaPilotoBE = campanhaBE.LPruebasPiloto[0];
                    }
                    else
                    {
                        return codInsertado;
                    }
                }
                else
                {
                    return codInsertado;
                }
            }
            else
            {
                return codInsertado;
            }

            cmd.Parameters.Add("@pIdPruebaPiloto", SqlDbType.Int).Direction = ParameterDirection.Output;
            cmd.Parameters.Add(new SqlParameter("@pIdCampanha", campanhaBE.IdCampanha));
            cmd.Parameters.Add(new SqlParameter("@pIdAgente", campanhaBE.Creativo.IdTrabajador));
            cmd.Parameters.Add(new SqlParameter("@pCorrelativo", pruebaPilotoBE.Correlativo));
            cmd.Parameters.Add(new SqlParameter("@pNombrePiloto", pruebaPilotoBE.NombrePiloto));
            cmd.Parameters.Add(new SqlParameter("@pDescripcion", pruebaPilotoBE.Descripcion));
            cmd.Parameters.Add(new SqlParameter("@pEstadoPruebaPiloto", pruebaPilotoBE.EstadoPruebaPiloto.ToString("D")));
            if (pruebaPilotoBE.TipoArchivo != null)
            {
                cmd.Parameters.Add(new SqlParameter("@pIdTipoArchivo", pruebaPilotoBE.TipoArchivo.IdTipoArchivo));
            }
            else
            {
                cmd.Parameters.Add(new SqlParameter("@pIdTipoArchivo", DBNull.Value));
            }

            cmd.Parameters.Add(new SqlParameter("@pTituloArchivo", pruebaPilotoBE.TituloArchivo));

            if (pruebaPilotoBE.ContenidoArchivo != null)
            {
                cmd.Parameters.Add(new SqlParameter("@pContenidoArchivo", pruebaPilotoBE.ContenidoArchivo));
            }
            else
            {
                cmd.Parameters.Add("@pContenidoArchivo", SqlDbType.VarBinary, -1).Value = DBNull.Value;
                //cmd.Parameters.Add(new SqlParameter("@pContenidoArchivo", DBNull.Value));
            }

            cmd.Parameters.Add(new SqlParameter("@pEstado", pruebaPilotoBE.Estado.ToString("D")));
            cmd.Parameters.Add(new SqlParameter("@pUsuario", pruebaPilotoBE.Usuario));

            try
            {
                cmd.ExecuteNonQuery();
                codInsertado = (int)cmd.Parameters["@pIdPruebaPiloto"].Value;

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                cmd.Dispose();
                if (!transaccionIniciada)
                {
                    this.CerrarConexion();
                }
            }
            return codInsertado;
        }


        /// <summary>
        /// Método              : modificarPruebaPiloto
        /// Descripción         : Modifica Prueba Piloto en la BD
        /// Fecha Creacion      : 01/04/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 01/04/2012
        /// </summary>
        /// <param name="campanhaBE">Entidad que representa el Arte</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool modificarPruebaPiloto(BECampanha campanhaBE,
                                          bool transaccionIniciada)
        {
            bool respuesta = true;

            //int codInsertado = 0;
            if (!transaccionIniciada)
            {
                this.Conexion();
                this.AbrirConexion();
            }
            cmd = new SqlCommand();
            cmd.Connection = this.connection;
            cmd.Transaction = this.miTransaccion;
            cmd.CommandText = "spModificaPruebaPiloto";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();

            BEPruebaPiloto pruebaPilotoBE = null;
            if (campanhaBE != null)
            {
                if (campanhaBE.Creativo != null)
                {
                    if (campanhaBE.LArtes != null && campanhaBE.LArtes.Count > 0)
                    {
                        pruebaPilotoBE = campanhaBE.LPruebasPiloto[0];
                    }
                    else
                    {
                        return respuesta;
                    }
                }
                else
                {
                    return respuesta;
                }
            }
            else
            {
                return respuesta;
            }

            cmd.Parameters.Add(new SqlParameter("@pIdPruebaPiloto", pruebaPilotoBE.IdPruebaPiloto));
            cmd.Parameters.Add(new SqlParameter("@pIdCampanha", campanhaBE.IdCampanha));
            cmd.Parameters.Add(new SqlParameter("@pIdAgente", campanhaBE.Creativo.IdTrabajador));
            cmd.Parameters.Add(new SqlParameter("@pCorrelativo", pruebaPilotoBE.Correlativo));
            cmd.Parameters.Add(new SqlParameter("@pNombrePiloto", pruebaPilotoBE.NombrePiloto));
            cmd.Parameters.Add(new SqlParameter("@pDescripcion", pruebaPilotoBE.Descripcion));
            cmd.Parameters.Add(new SqlParameter("@pEstadoPruebaPiloto", pruebaPilotoBE.EstadoPruebaPiloto.ToString("D")));
            if (pruebaPilotoBE.TipoArchivo != null)
            {
                cmd.Parameters.Add(new SqlParameter("@pIdTipoArchivo", pruebaPilotoBE.TipoArchivo.IdTipoArchivo));
            }
            else
            {
                cmd.Parameters.Add(new SqlParameter("@pIdTipoArchivo", DBNull.Value));
            }

            cmd.Parameters.Add(new SqlParameter("@pTituloArchivo", pruebaPilotoBE.TituloArchivo));

            if (pruebaPilotoBE.ContenidoArchivo != null)
            {
                cmd.Parameters.Add(new SqlParameter("@pContenidoArchivo", pruebaPilotoBE.ContenidoArchivo));
            }
            else
            {
                cmd.Parameters.Add("@pContenidoArchivo", SqlDbType.VarBinary, -1).Value = DBNull.Value;
                //cmd.Parameters.Add(new SqlParameter("@pContenidoArchivo", DBNull.Value));
            }

            cmd.Parameters.Add(new SqlParameter("@pEstado", pruebaPilotoBE.Estado.ToString("D")));
            cmd.Parameters.Add(new SqlParameter("@pUsuario", pruebaPilotoBE.Usuario));

            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
                cmd.Dispose();
                if (!transaccionIniciada)
                {
                    this.CerrarConexion();
                }
            }
            return respuesta;
        }

        /// <summary>
        /// Método              : eliminarPruebaPiloto
        /// Descripción         : Elimina Prueba Piloto en la BD
        /// Fecha Creacion      : 01/04/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 01/04/2012
        /// </summary>
        /// <param name="pruebaPilotoBE">Entidad que representa la Prueba Piloto</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool eliminarPruebaPiloto(BEPruebaPiloto pruebaPilotoBE,
                                         bool transaccionIniciada)
        {
            bool respuesta = true;

            //int codInsertado = 0;
            if (!transaccionIniciada)
            {
                this.Conexion();
                this.AbrirConexion();
            }
            cmd = new SqlCommand();
            cmd.Connection = this.connection;
            cmd.Transaction = this.miTransaccion;
            cmd.CommandText = "spEliminaPruebaPiloto";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();

            cmd.Parameters.Add(new SqlParameter("@pIdPruebaPiloto", pruebaPilotoBE.IdPruebaPiloto));
            cmd.Parameters.Add(new SqlParameter("@pEstado", pruebaPilotoBE.Estado.ToString("D")));
            cmd.Parameters.Add(new SqlParameter("@pUsuario", pruebaPilotoBE.Usuario));

            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
                cmd.Dispose();
                if (!transaccionIniciada)
                {
                    this.CerrarConexion();
                }
            }
            return respuesta;
        }


        /// <summary>
        /// Método              : aprobarPruebaPiloto
        /// Descripción         : Aprueba Prueba Piloto en la BD
        /// Fecha Creacion      : 01/04/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 01/04/2012
        /// </summary>
        /// <param name="pruebaPilotoBE">Entidad que representa la Prueba Piloto</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool aprobarPruebaPiloto(BEPruebaPiloto pruebaPilotoBE,
                                        bool transaccionIniciada)
        {
            bool respuesta = true;

            //int codInsertado = 0;
            if (!transaccionIniciada)
            {
                this.Conexion();
                this.AbrirConexion();
            }
            cmd = new SqlCommand();
            cmd.Connection = this.connection;
            cmd.Transaction = this.miTransaccion;
            cmd.CommandText = "spAprobarPruebaPiloto";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();

            cmd.Parameters.Add(new SqlParameter("@pIdPruebaPiloto", pruebaPilotoBE.IdPruebaPiloto));
            cmd.Parameters.Add(new SqlParameter("@pUsuario", pruebaPilotoBE.Usuario));

            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
                cmd.Dispose();
                if (!transaccionIniciada)
                {
                    this.CerrarConexion();
                }
            }
            return respuesta;
        }

        /// <summary>
        /// Método              : obtenerPruebaPilotoPorId
        /// Descripción         : Obtiene la Entidad Prueba Piloto
        /// Fecha Creacion      : 01/04/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 01/04/2012
        /// </summary>
        /// <param name="idPruebaPiloto">Id Prueba Piloto</param>
        /// <returns>Retorna el Objeto que representa la Entidad Prueba Piloto</returns>
        public BEPruebaPiloto obtenerPruebaPilotoPorId(int idPruebaPiloto)
        {
            DataSet ds = null;
            BEPruebaPiloto pruebaPilotoBE = null;
            this.Conexion();

            cmd = new SqlCommand();
            cmd.Connection = this.connection;
            this.AbrirConexion();

            cmd.CommandText = "spSelPruebaPilotoPorId";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();
            cmd.Parameters.Add(new SqlParameter("@pIdPruebaPiloto", idPruebaPiloto));

            try
            {
                cmd.ExecuteNonQuery();

                ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);

                if (ds != null)
                {
                    pruebaPilotoBE = this.poblarPruebaPiloto(ds.Tables[(int)Constantes.PRUEBA_PILOTO_DATOS.DATOS_GENERALES], pruebaPilotoBE);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                cmd.Dispose();
                this.CerrarConexion();
            }
            return pruebaPilotoBE;
        }

        /// <summary>
        /// Método              : poblarPruebaPiloto
        /// Descripción         : Se encarga de poblar los datos obtenidos en la Entidad Prueba Piloto
        /// Fecha Creacion      : 01/04/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 01/04/2012
        /// </summary>
        /// <param name="dtPruebaPiloto">Resultado de la Búsqueda por Id</param>
        /// <param name="pruebaPilotoBE">Entidad que representa la Prueba Piloto</param>
        /// <returns>Retorna el Objeto que representa la Entidad Prueba Piloto</returns>
        public BEPruebaPiloto poblarPruebaPiloto(DataTable dtPruebaPiloto, BEPruebaPiloto pruebaPilotoBE)
        {
            if (dtPruebaPiloto != null && dtPruebaPiloto.Rows.Count > 0)
            {
                if (pruebaPilotoBE == null)
                {
                    pruebaPilotoBE = new BEPruebaPiloto();
                }

                DataRow drPruebaPiloto = dtPruebaPiloto.Rows[0];
                if (drPruebaPiloto["id_prueba_piloto"] != DBNull.Value)
                {
                    int tempIdPruebaPiloto = 0;
                    int.TryParse(drPruebaPiloto["id_prueba_piloto"].ToString(), out tempIdPruebaPiloto);
                    pruebaPilotoBE.IdPruebaPiloto = tempIdPruebaPiloto;
                }

                if (drPruebaPiloto["correlativo"] != DBNull.Value)
                {
                    int tempCorrelativo = 0;
                    int.TryParse(drPruebaPiloto["correlativo"].ToString(), out tempCorrelativo);
                    pruebaPilotoBE.Correlativo = tempCorrelativo;
                }
                if (drPruebaPiloto["nombre_piloto"] != DBNull.Value)
                {
                    pruebaPilotoBE.NombrePiloto = drPruebaPiloto["nombre_piloto"].ToString();
                }
                if (drPruebaPiloto["descripcion"] != DBNull.Value)
                {
                    pruebaPilotoBE.Descripcion = drPruebaPiloto["descripcion"].ToString();
                }
                if (drPruebaPiloto["estado_prueba_piloto"] != DBNull.Value)
                {
                    pruebaPilotoBE.EstadoPruebaPiloto = Constantes.ObtenerEnumEstadoPruebaPiloto(drPruebaPiloto["estado_prueba_piloto"].ToString());
                }
                if (drPruebaPiloto["nombre_estado_prueba_piloto"] != DBNull.Value)
                {
                    pruebaPilotoBE.DescripcionEstadoPruebaPiloto = drPruebaPiloto["nombre_estado_prueba_piloto"].ToString();
                }
                if (drPruebaPiloto["id_tipo_archivo"] != DBNull.Value)
                {
                    int tempIdTipoArchivo = 0;
                    int.TryParse(drPruebaPiloto["id_tipo_archivo"].ToString(), out tempIdTipoArchivo);
                    pruebaPilotoBE.TipoArchivo = new BETipoArchivoDisponible();
                    pruebaPilotoBE.TipoArchivo.IdTipoArchivo = tempIdTipoArchivo;

                    if (drPruebaPiloto["extension"] != DBNull.Value)
                    {
                        pruebaPilotoBE.TipoArchivo.Extension = drPruebaPiloto["extension"].ToString();
                    }
                    if (drPruebaPiloto["tipo_mime"] != DBNull.Value)
                    {
                        pruebaPilotoBE.TipoArchivo.TipoMime = drPruebaPiloto["tipo_mime"].ToString();
                    }
                }
                if (drPruebaPiloto["titulo_archivo"] != DBNull.Value)
                {
                    pruebaPilotoBE.TituloArchivo = drPruebaPiloto["titulo_archivo"].ToString();
                }
                if (drPruebaPiloto["contenido_archivo"] != DBNull.Value)
                {
                    pruebaPilotoBE.ContenidoArchivo = (byte[])drPruebaPiloto["contenido_archivo"];
                }
                if (drPruebaPiloto["estado"] != DBNull.Value)
                {
                    pruebaPilotoBE.Estado = Common.Constantes.ObtenerEnumEstado(drPruebaPiloto["estado"].ToString());
                }
            }
            return pruebaPilotoBE;
        }

        #endregion
    }
}
